const http = require("http");
const fs = require("fs");
const urls = require("url");
const utils = require("./util.js");
const srever = http.createServer((req, res) => {
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    let pathObj = urls.parse(req.url, true);
    let query = pathObj.query;
    let url;
    // if(query.path)
    // 安全的判断
    // 判断是否有path参数 ，做文件夹显示
    if (typeof query.path != "undefined") {
        url = query.path;
    } else {
        url = "./test";
    }
    // 判断是否有del参数 做删除操作
    if (typeof query.del != "undefined") {
        let delpath = query.del;
        let stats = fs.statSync(delpath);
        if (stats.isDirectory()) {
            // 直接删除非空文件夹
            utils.removeDir(delpath)
        } else {
            // 文件 直接删除
            fs.unlinkSync(delpath);
        }
        // 删除完毕之后跳转一次；把参数去掉
        // 404 200 101 3重定向 
        // 404 200 401（没有权限） 301（永久重定向） 302（临时重定向）
        // 302 浏览器获取302状态码后 ，会自动查找 responseheader 里的
        // location 然后浏览器会自动跳转到 location的地址
        res.statusCode = 302;
        res.setHeader("location","/");
    }

    // url = "./test/a"
    let arr = fs.readdirSync(url);
    console.log(arr);
    let str = "<table> <tr><th>文件名</th><th>操作</th></tr>"
    arr.forEach(item => {
        // [ '1.txt', 'a', 'b' ]
        // 1.txt  a  b
        let mypath = url + "/" + item;
        let stat = fs.statSync(mypath);
        if (stat.isDirectory()) {
            str += `<tr><td><a href="/?path=${mypath}">${item}</a></td><td><a href='/?del=${mypath}'>删除</a></td></tr>`;
        } else {
            str += `<tr><td>${item}</td><td><a href='/?del=${mypath}'>删除</a></td></tr>`;
        }
    })
    str += "</table>";


    // res.statusCode = 404;
    res.write(str);
    res.end();
})
srever.listen(8080);
// nodemon 工具  ：在每次保存文件的时候会自定重启node服务器
// npm i nodemon -g
// node 文件
// nodemon 文件  

// 1.搜索 power shell  以管理员身份打开 （鼠标右键）
// 2.输入 set-ExecutionPolicy RemoteSigned 在输入 y 在确定 
// 3.vscode的终端重新打开